》Camera
Phaser 有提供一些 camera 上的特效,如 fade shake flash,今日我們會提到如何使用這些特效、偵聽動畫結束後以及防止多次呼叫。
》Javascript 內容
我們調整一下生命週期 update 的區塊
scene.update = function() {
.....
if (Phaser.Geom.Intersects.RectangleToRectangle(playerRect, houseRect)) {
console.log('到家了')
this.scene.pause()
}
if (Phaser.Geom.Intersects.RectangleToRectangle(playerRect, tankRect)) {
console.log('撞到了紅色坦克')
this.gameOver()
}
if (Phaser.Geom.Intersects.RectangleToRectangle(playerRect, tankRect2)) {
console.log('撞到了沙色坦克')
this.gameOver()
}
.....
}
// 增加 gameOver
scene.gameOver = function() {
// 500 ms 相機 shake 效果
this.cameras.main.shake(500)
// 偵聽 shake 動畫結束
this.cameras.main.on('camerashakecomplete', () => {
// 500 ms 相機 fade 效果
this.cameras.main.fade(500)
})
// 偵聽 fade out 動畫結束
this.cameras.main.on('camerafadeoutcomplete', () => {
// 遊戲重新
this.scene.restart()
})
}
// 假如撞到坦克,會一直呼叫 gameOver,這時候我們還要特別處理不要呼叫多次的 gameOver
scene.init = function() {
.....
this.isGameOver = false
}
scene.update = function() {
if (this.isGameOver) return
.....
}
scene.gameOver = function() {
this.isGameOver = true
}
》結論
今天我們練習到 camera 的特效,偵聽特效結束後的偵聽的後續處理;且為了能讓程式更好,所以我們當碰撞到 tank 的時候,希望不要多次呼叫 gameOver ,只希望呼叫一次就好,所以我們多記 gameOver 的狀態。
今天就先到這裡,我們明天見。